package com.crm.dao.mapper.customMapper.callCenterCustomMapper;

import com.crm.model.qo.callCenter.CallFormQO;
import com.crm.model.qo.callCenter.CallMarkupQO;
import com.crm.model.vo.callCenter.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 呼叫中心-呼叫表单
 *
 * @Author renshaorong
 * @Date 2021/4/1
 */
public interface CallFormCustomMapper {

    /**
     * 呼叫表单列表（全部）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     * @Author renshaorong
     * @Date 2021/4/1
     */
    List<CallFormVO> selectAllCallFormList(@Param("callFormQO") CallFormQO callFormQO, @Param("dateUnit") Integer dateUnit, @Param("order") String order);

    /**
     * 呼叫表单列表（当前用户所在分公司）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     * @Author renshaorong
     * @Date 2021/4/1
     */
    List<CallFormVO> selectCallFormListByCompanyId(@Param("callFormQO") CallFormQO callFormQO, @Param("dateUnit") Integer dateUnit, @Param("order") String order);

    /**
     * 呼叫表单列表（当前用户）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     * @Author renshaorong
     * @Date 2021/4/1
     */
    List<CallFormVO> selectCallFormListByUserId(@Param("callFormQO") CallFormQO callFormQO, @Param("dateUnit") Integer dateUnit, @Param("order") String order);


    /**
     * 呼叫详情列表（全部）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     */
    List<CallFormVO> selectAllCallDetailsList(@Param("callFormQO") CallFormQO callFormQO, @Param("dateUnit") Integer dateUnit, @Param("order") String order);

    /**
     * 呼叫详情列表（当前用户所在分公司）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     */
    List<CallFormVO> selectCallDetailsListByCompanyId(@Param("callFormQO") CallFormQO callFormQO, @Param("dateUnit") Integer dateUnit, @Param("order") String order);

    /**
     * 呼叫详情列表（当前用户）
     *
     * @param callFormQO 查询条件
     * @param dateUnit   时间类型（全部/本周/本月）
     * @param order      排序字段 类型
     * @return
     */
    List<CallFormVO> selectCallDetailsListByUserId(@Param("callFormQO") CallFormQO callFormQO, @Param("dateUnit") Integer dateUnit, @Param("order") String order);

    /**
     * 折线图（接听、未接听、接听总数三条折线）
     *
     * @param dateUnit
     * @param type
     * @param accountId
     * @return
     * @Author renshaorong
     * @Date 2021/4/16
     */
    List<Integer> getPolyLineByAnswers(@Param("dateUnit") Integer dateUnit, @Param("type") Integer type, @Param("accountId") String accountId);

    /**
     * 饼状图（30s/60s/90s/大于90s）
     *
     * @param dateUnit
     * @param accountId
     * @return
     * @Author renshaorong
     * @Date 2021/4/16
     */
    List<Map> getMinutePieData(@Param("dateUnit") Integer dateUnit, @Param("accountId") String accountId);

    /**
     * 统计表（标签：1 意向电话 2 无意向电话 3 未标记电话 4 抽取标签电话 5 产生话术电话 6 恶意回复电话）
     *
     * @param dateUnit
     * @param accountId
     * @return
     * @Author renshaorong
     * @Date 2021/4/16
     */
    CallReportVO selectcallReportVOList(@Param("dateUnit") Integer dateUnit, @Param("accountId") String accountId, @Param(("line"))Integer line);

    /**
     * 获取时间列表
     *
     * @param dateUnit
     * @return
     * @Author renshaorong
     * @Date 2021/4/16
     */
    List<String> getTimeList(@Param("dateUnit") Integer dateUnit);


    /**
     * @Description: 获取呼叫列表
     * @Param: [accountId, startTm, endTm, delStatus]
     * @Return: CallStatisticsVO
     * @Author: lixq-f
     * @Date: 2021/4/28
     **/
    CallStatisticsVO selectCallStatistics(@Param("accountId") String accountId,
                                          @Param("startTm") Date startTm,
                                          @Param("endTm") Date endTm);


    /**
     * @Description: 呼叫平均值
     * @Param: [companyId, startTm, endTm]
     * @Return: java.util.List<com.crm.model.vo.callCenter.CallVO>
     * @Author: lixq-f
     * @Date: 2021/4/28
     **/
    List<CallVO<BigDecimal>> selectCallAverageTimesByDay(@Param("companyId") String companyId,
                                                         @Param("startTm") Date startTm,
                                                         @Param("endTm") Date endTm);

    /**
     * @Description: 呼叫平均值
     * @Param: [companyId, startTm, endTm]
     * @Return: java.util.List<com.crm.model.vo.callCenter.CallVO>
     * @Author: lixq-f
     * @Date: 2021/4/28
     **/
    List<CallVO<BigDecimal>> selectCallAverageTimesByMonth(@Param("companyId") String companyId,
                                                           @Param("startTm") Date startTm,
                                                           @Param("endTm") Date endTm);


    /**
     * 获取员工呼叫次数-按天
     *
     * @param accountId
     * @param startTm
     * @param endTm
     * @return
     */
    List<CallVO<Long>> selectEmpCallTimesByDay(@Param("accountId") String accountId,
                                               @Param("startTm") Date startTm,
                                               @Param("endTm") Date endTm);


    /**
     * 获取员工呼叫次数-按月
     *
     * @param accountId
     * @param startTm
     * @param endTm
     * @return
     */
    List<CallVO<Long>> selectEmpCallTimesByMonth(@Param("accountId") String accountId,
                                                 @Param("startTm") Date startTm,
                                                 @Param("endTm") Date endTm);


    /**
     * @Description: 通话时长排名统计
     * @Param: [accountId, companyId, startTm, endTm]
     * @Return: com.crm.model.vo.callCenter.CallDurationVO
     * @Author: lixq-f
     * @Date: 2021/4/29
     **/
    CallDurationVO selectCallDurationStatistics(@Param("accountId") String accountId,
                                                @Param("companyId") String companyId,
                                                @Param("startTm") Date startTm,
                                                @Param("endTm") Date endTm);

    /**
     * @Description: 通话时长排名
     * @Param: [accountId, companyId, startTm, endTm]
     * @Return: com.crm.model.vo.callCenter.CallDurationVO
     * @Author: lixq-f
     * @Date: 2021/4/29
     **/
    Integer selectge90SecendsRank(@Param("accountId") String accountId,
                                         @Param("companyId") String companyId,
                                         @Param("startTm") Date startTm,
                                         @Param("endTm") Date endTm);
    /**
     * @Description: 通话时长排名
     * @Param: [accountId, companyId, startTm, endTm]
     * @Return: com.crm.model.vo.callCenter.CallDurationVO
     * @Author: lixq-f
     * @Date: 2021/4/29
     **/
    Integer selectge60lt90SecendsRank(@Param("accountId") String accountId,
                                         @Param("companyId") String companyId,
                                         @Param("startTm") Date startTm,
                                         @Param("endTm") Date endTm);
    /**
     * @Description: 通话时长排名
     * @Param: [accountId, companyId, startTm, endTm]
     * @Return: com.crm.model.vo.callCenter.CallDurationVO
     * @Author: lixq-f
     * @Date: 2021/4/29
     **/
    Integer selectge30lt60SecendsRank(@Param("accountId") String accountId,
                                         @Param("companyId") String companyId,
                                         @Param("startTm") Date startTm,
                                         @Param("endTm") Date endTm);
    /**
     * @Description: 通话时长排名
     * @Param: [accountId, companyId, startTm, endTm]
     * @Return: com.crm.model.vo.callCenter.CallDurationVO
     * @Author: lixq-f
     * @Date: 2021/4/29
     **/
    Integer selectlt30SecendsRank(@Param("accountId") String accountId,
                                         @Param("companyId") String companyId,
                                         @Param("startTm") Date startTm,
                                         @Param("endTm") Date endTm);


    /**
     * @Description: 呼叫表单标记
     * @Param: [markupQO]
     * @Return: boolean
     * @Author: lixq-f
     * @Date: 2021/5/28
     **/
    Integer callMarkup(@Param("markupQO") CallMarkupQO markupQO);
}
